package com.bbva.itradecomex.bo.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bbva.itradecomex.bo.iface.RankingBancosBO;
import com.bbva.itradecomex.dao.iface.ConsultaComunDAO;
import com.bbva.itradecomex.dao.iface.VistaBancoDAO;
import com.bbva.itradecomex.domain.BancoRankBancoResultado;
import com.bbva.itradecomex.domain.MultiTabla;
import com.bbva.itradecomex.form.RankingBancoBusquedaForm;
import com.bbva.itradecomex.util.Constantes;
import com.bbva.itradecomex.util.ITradexUtil;

@Service
public class RankingBancosBOImpl implements RankingBancosBO {

	@Autowired
	private VistaBancoDAO vistaBancoDAO;
	
	@Autowired
	private ConsultaComunDAO consultaComunDAO;
	
	
	public List<MultiTabla> getListBusquedaMultiTabla(String inIdTabla)	throws Exception {
		return consultaComunDAO.getListBusquedaMultiTabla(inIdTabla);
	}
	
	@Override
	public List<BancoRankBancoResultado> getListRankingBancoImport(RankingBancoBusquedaForm form) throws Exception {
		return vistaBancoDAO.getListBanoRankBancoDetImp(form);
	}

	@Override
	public List<BancoRankBancoResultado> getListRankingBancoExport(RankingBancoBusquedaForm form)
			throws Exception {
		return vistaBancoDAO.getListBanoRankBancoDetExp(form);
	}

	@Override
	public List<BancoRankBancoResultado> getListRankingBancoImpExp(RankingBancoBusquedaForm form)
			throws Exception {
		return vistaBancoDAO.getListBanoRankBancoDetImpExp(form);
	}

	@Override
	public void setearTotales(BancoRankBancoResultado totalBancoImp,
			List<BancoRankBancoResultado> listaBBancoResultadoImportaciones) {
		
			for (BancoRankBancoResultado bancoRankBancoResultado : listaBBancoResultadoImportaciones) {
					totalBancoImp.setTotOper(ITradexUtil.addBigDecimal(totalBancoImp.getTotOper(), bancoRankBancoResultado.getTotOper()));
					totalBancoImp.setTotImporte(ITradexUtil.addBigDecimal(totalBancoImp.getTotImporte(),bancoRankBancoResultado.getTotImporte()));
					totalBancoImp.setTxOper(ITradexUtil.addBigDecimal(totalBancoImp.getTxOper(),bancoRankBancoResultado.getTxOper()));
					totalBancoImp.setTxImporte(ITradexUtil.addBigDecimal(totalBancoImp.getTxImporte(),bancoRankBancoResultado.getTxImporte()));
					totalBancoImp.setLcOper(ITradexUtil.addBigDecimal(totalBancoImp.getLcOper(),bancoRankBancoResultado.getLcOper()));
					totalBancoImp.setLcImporte(ITradexUtil.addBigDecimal(totalBancoImp.getLcImporte(),bancoRankBancoResultado.getLcImporte()));
					totalBancoImp.setClOper(ITradexUtil.addBigDecimal(totalBancoImp.getClOper(),bancoRankBancoResultado.getClOper()));
					totalBancoImp.setClImporte(ITradexUtil.addBigDecimal(totalBancoImp.getClImporte(),bancoRankBancoResultado.getClImporte()));
					
					// SE COMPLETAN LOS VALORES DE LOS CAMPOS BCOGRUPO, CONCLAVE Y ALADI
					if(bancoRankBancoResultado.getBcoGrupo().equals(Constantes.CONSTANTE_SI_VAL))
						bancoRankBancoResultado.setBcoGrupo(Constantes.CONSTANTE_SI_DESC);
					else if(bancoRankBancoResultado.getBcoGrupo().equals(Constantes.CONSTANTE_NO_VAL))
						bancoRankBancoResultado.setBcoGrupo(Constantes.CONSTANTE_NO_DESC);
					
					if(bancoRankBancoResultado.getConClave().equals(Constantes.CONSTANTE_SI_VAL))
						bancoRankBancoResultado.setConClave(Constantes.CONSTANTE_SI_DESC);
					else if(bancoRankBancoResultado.getConClave().equals(Constantes.CONSTANTE_NO_VAL))
						bancoRankBancoResultado.setConClave(Constantes.CONSTANTE_NO_DESC);
					
					if(bancoRankBancoResultado.getAladi().equals(Constantes.CONSTANTE_SI_VAL))
						bancoRankBancoResultado.setAladi(Constantes.CONSTANTE_SI_DESC);
					else if(bancoRankBancoResultado.getAladi().equals(Constantes.CONSTANTE_NO_VAL))
						bancoRankBancoResultado.setAladi(Constantes.CONSTANTE_NO_DESC);
			}
	}

	@Override
	public void generaPDFRankingBanco(Integer impoExpo,FacesContext facesContext,
			List<BancoRankBancoResultado> listBancoResultadoImportacion,
			RankingBancoBusquedaForm filtros, BancoRankBancoResultado totales,String strTipoArchivoExportacion) 
					throws Exception {
		
		Map<String,Object> parametros = new HashMap<String, Object>();
		String strNombrePDF = "Ranking_Bancos_";
		parametros.put("titulo","RANKING BANCOS");
		if (impoExpo==Constantes.TIPO_IMPORTACION_VAL){
			parametros.put("expoImpo","IMPORTACIONES");
			strNombrePDF+="IMPO_";
		}
		else if(impoExpo==Constantes.TIPO_EXPORTACION_VAL){
			parametros.put("expoImpo","EXPORTACIONES");
			strNombrePDF+="EXPO_";
		}
		else if(impoExpo==Constantes.TIPO_IMPOEXPO_VAL){
			parametros.put("expoImpo","IMPORTACIONES Y EXPORTACIONES");
			strNombrePDF+="IMPOEXPO_";
		}
		parametros.put("filPais",ITradexUtil.toString(filtros.getStrDescPais()));
		parametros.put("filNomBanco",ITradexUtil.toString(filtros.getStrDescBanco()));
		parametros.put("filClave",filtros.getStrExcluClave());
		parametros.put("filGrupo",filtros.getStrExcluGrupo());
		parametros.put("filFechaIni",filtros.getDtFechaIni());
		parametros.put("filFechaFin",filtros.getDtFechaFin());
		if(filtros.getLngTopBanco()!=null && filtros.getLngTopBanco() > 0)
			parametros.put("filTopBanco",filtros.getLngTopBanco());
		parametros.put("filAladi",filtros.getStrExcluOpera());
		
		if(totales==null)totales=new BancoRankBancoResultado();
		
		parametros.put("totalOper",totales.getTotOper());
		parametros.put("totalImporte",totales.getTotImporte());
		parametros.put("totalTxOper",totales.getTxOper());
		parametros.put("totalTxImporte",totales.getTxImporte());
		parametros.put("totalLcOper",totales.getLcOper());
		parametros.put("totalLcImporte",totales.getLcImporte());
		parametros.put("totalClOper",totales.getClOper());
		parametros.put("totalClImporte",totales.getClImporte());
		
		strNombrePDF=strNombrePDF+"_"+"[FechaInformacion]";
		if (strTipoArchivoExportacion.equals(Constantes.TIPO_ARCHIVO_EXPORTACION_PDF)){
			ITradexUtil.exportPDF(parametros, listBancoResultadoImportacion, "/xmlReport/banco/rankingBancos/rankingBancos.jasper", strNombrePDF);	
		}else if(strTipoArchivoExportacion.equals(Constantes.TIPO_ARCHIVO_EXPORTACION_XLS)){
			parametros.put("listBancoResultadoImportacion", listBancoResultadoImportacion);
			ITradexUtil.exportXLSJasperEmptyDS(parametros, "/xmlReport/banco/rankingBancos/rankingBancos_Excel.jasper", strNombrePDF);
		}
	}
}
